iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 6
0
自我挑戰組

LeetCode演算法刷題 使用Go系列 第 6

Day06-[LeetCode演算法刷題 使用Go] -Longest Common Prefix

  • 分享至 

  • xImage
  •  

題目連結: Longest Common Prefix

題目描述為給定一陣列,裡面存放元素為字串,要找出最長的共同前綴詞。
題目還有補充說明字串裡面只會包含小寫英文字母 a~z。
例子1:
Input: ["flower","flow","flight"]
Output: "fl"

思路1: 按照共同前綴詞定義

設此字串陣列為 strs 且非空,我們可以用第一個字串 fs 為基準,與其他字串進行比較。
流程如下: 先比較是否所有字串都包含 fs 的第一個字元,若有任一個字串不包含則停止比較。
若所有字串都包含則繼續比較 fs 的第二個字元,重複此步驟。
其中因為各字串長度並不相同,我們需要防止上述流程中查找的長度造成數組越界,即增加限制條件:
當比較到字串 fs 第 k 個字元時,若比較中的字串長度 < k 則不進行比較。
按此流程我們可以知道最多可以取到字串 fs 的第幾個字元為共同前綴詞。

  • 複雜度評估
    設輸入的字串數量為 n ,字串陣列中字串的最小長度為 m,則需要處理 n(m+1) 次,時間複雜度為 O(mn)。此方法只使用常數量空間,與 m,n 無關,空間複雜度為 O(1)。

參考程式碼

func longestCommonPrefix(strs []string) string {
     
    if len(strs)==0{
        return ""
    }

    s:=""
   
    for i:=0;i<len(strs[0]);i++{
        for j:=1;j<len(strs);j++{
            if  ( (i>=len(strs[j])) || (strs[0][i]!=strs[j][i]) ){
                return s
            }
        }
        s+=string(strs[0][i])
    }
    
    return s
}

小結

思路1可以簡單修改:先找出字串陣列中最小長度 minL,省去檢查限制條件,只需要專注比較字元是否相同即可。

我將修改後的方法作為解法2 加上簡單的測試,上傳程式碼到此。


上一篇
Day05-[LeetCode演算法刷題 使用Go] -Roman to Integer
下一篇
Day07-[LeetCode演算法刷題 使用Go] -Fibonacci Number
系列文
LeetCode演算法刷題 使用Go30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言